#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    /**
     * 10-1 
     **/
    if (argc < 2) {
        cout << "Error, please use: \n"
            << argv[1] << " apple.jpg" << endl;
        return -1;
    }
    cv::Mat src = cv::imread(argv[1]);
    if (src.empty()) {
        cout << "Load image " << argv[1] << "Failed." << endl;
        return -1;
    }

    cv::Mat dst3, dst5, dst9, dst11, dst52;
    cv::GaussianBlur(src, dst3, cv::Point(3,3), 0);
    cv::GaussianBlur(src, dst5, cv::Point(5,5), 0);
    cv::GaussianBlur(src, dst9, cv::Point(9,9), 0);
    cv::GaussianBlur(src, dst11, cv::Point(11,11), 0);
    cv::GaussianBlur(dst5, dst52, cv::Point(5,5), 0);
    cv::imshow("origin", src);
    cv::imshow("Gaussian3x3", dst3);
    cv::imshow("Gaussian5x5", dst5);
    cv::imshow("Gaussian9x9", dst9);
    cv::imshow("Gaussian11x11", dst11);
    cv::imshow("Gaussian52", dst52);

    /***
     * 10-2
     */
    cv::Mat src2(100, 100, CV_8UC1, cv::Scalar(0));
    src2.at<uchar>(50,50) = 255;

    cv::imshow("origin2", src2);

    cv::Mat dst25, dst29, dst252;
    cv::GaussianBlur(src2, dst25, cv::Size(5,5), 0);
    cv::GaussianBlur(src2, dst29, cv::Size(9,9), 0);
    cv::GaussianBlur(dst25, dst252, cv::Size(5,5), 0);
    cv::imshow("5x5", dst25);
    cv::imshow("9x9", dst29);
    cv::imshow("5x5x2", dst252);

    cv::waitKey(0);
    return 0;
}